package problema046;

import java.util.HashSet;
import java.util.Set;

public class GoldbachsOtherConjecture {
	
	static boolean[] primos;
	static int[] cuad;
	static Set<Integer> num;
	
	public static void main(String[] args){
		cualFalla();
	}
	
	public static void cualFalla(){
		num = new HashSet<Integer>();
		sieveOfEratosthenes(10000);
		armarCuad(10000);
		armarSet();
		for(int i = 3; ; i += 2){
			if(!num.contains(i)){
				System.out.println(i);
				break;
			}
		}
	}
	
	public static void armarSet(){
		for(int i = 0; i < primos.length; i++){
			if(!primos[i])continue;
			for(int j = 0; j < cuad.length; j++){
				num.add(i + cuad[j]);
			}
		}
	}
	
	public static void armarCuad(double n){
		double hasta = Math.sqrt(n);
		int hastaI = (int) hasta;
		cuad = new int[hastaI];
		for(int i = 1; i < hastaI; i++){
			cuad[i-1] = 2 * i * i;
		}
	}
	
	public static void sieveOfEratosthenes(int n){
	     primos = new boolean[n + 1];
	     for (int i = 2; i <= n; i++) {
	         primos[i] = true;
	     }
	     for (int i = 2; i*i <= n; i++) {
	         if (primos[i]) {
	             for (int j = i; i*j <= n; j++) {
	                 primos[i*j] = false;
	             }
	         }
	     }
	 }

}
